1

在操作数据库时,对数据的修改是需要有足够的安全措施的,其实在实际工作中,我们用db.collections.update的时候不多,在修改时我们都会用findAndModify,它可以给我们返回来一些必要的参数,让我们对修改多了很多控制力,控制力的加强也就是对安全的强化能力加强了。

应答时写入

我们之前所学习的都是非应答式的,就是再操作完数据之后,并没有任何回应和返回值。

应答式
写入就会给我们返回结果,结果里面包含的项目很多,这样我们就能更好的进行程序的控制和安全机制的处理。

db.runCommand()

他是数据库运行命令的执行器,执行命令首先就要使用它,因为它在Shell和驱动程序间提供了一致的接口。

db.workmate.update({sex:1},{$set:{money:1000}},false,true)
// false意思是,如果有这个属性就修改,如果没有就不修改,(因为我们要修改的只是)
// true 意思是,如果是true,表示对所有查询结果都做修改
var resultMessage=db.runCommand({getLastError:1}) // 执行完数据库操作后会返回一个对象
// getLastError:1 :表示会返回功能错误

// printjson:表示以json对象的格式输出到控制台。
printjson(resultMessage);// 以json的形式输出

上边的代码,我们修改了所有男士的数据,每个人增加了1000元钱(money),然后用db.runCommand()执行,可以看到执行结果在控制台返回了。如下:

{
        "connectionId" : 1,
        "updatedExisting" : true, // 这个有用
        "n" : 2,
        "syncMillis" : 0,
        "writtenTo" : null,
        "err" : null,
        "ok" : 1
}
// runCommand()的另外一个用法
// 命令行中使用该命令查看数据库是否连接成功
> use login
switched to db login
> db.runCommand({ping: 1});
{ "ok" : 1 }

// 返回{ "ok" : 1 }表示数据库连接成功!!

findAndModify
findAndModify是查找并修改的意思。配置它可以在修改后给我们返回修改的结果。

// 
var myModify={
    findAndModify:"workmate", // 哪个集合
    query:{name:'JSPang'},  // 查询条件
    update:{$set:{age:18}},    // 修改操作
    new:true    //更新完成,需要查看结果,如果为false不进行查看结果
}
var ResultMessage=db.runCommand(myModify);
 
printjson(ResultMessage)

// findAndModify的性能是没有直接使用db.collections.update的性能好,但是在实际工作中都是使用它,毕竟要商用的程序安全性还是比较重要的。

findAndModify属性值:

query是查询选择器,与findOne的查询选择器相同

update是要更新的值,不能与remove同时出现

remove表示删除符合query条件的文档,不能与update同时出现

new为true:返回个性后的文档,false:返回个性前的,默认是false

sort:排序条件,与sort函数的参数一致。

fields:投影操作,与find*的第二个参数一致。

upsert:与update的upsert参数一样。

例如:

db.mongo_book.findAndModify({query:{"code":15409639},
                                     update:{ $set : { catalogStatus : 3}} ,
                                     new:true,
                                     });

Meils
1.6k 声望157 粉丝

前端开发实践者